package com.xiaoshuidi.cloud.module.contract.service.bill;

import com.xiaoshuidi.cloud.framework.common.pojo.CommonResult;
import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.contract.controller.admin.bill.vo.OrderFeesDetaillVo;
import com.xiaoshuidi.cloud.module.contract.controller.admin.bill.vo.OrderInformationVo;
import com.xiaoshuidi.cloud.module.contract.controller.admin.bill.vo.orderFees.*;
import com.xiaoshuidi.cloud.module.contract.controller.app.bill.vo.OrderFeesDetailAppVo;
import com.xiaoshuidi.cloud.module.contract.dal.dataobject.bill.OrderFeesDO;
import com.xiaoshuidi.cloud.module.contract.dal.dataobject.bill.RentOrderDO;
import com.xiaoshuidi.cloud.module.contract.vo.OrderFeeAmountReqVO;
import com.xiaoshuidi.cloud.module.contract.vo.OrderFeeAmountRespVO;
import com.xiaoshuidi.cloud.module.contract.vo.OrderFeeDetailVO;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 账单明细 Service 接口
 *
 * @author 合房租赁
 */
public interface OrderFeesService {
    /**
     * 创建账单明细
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createOrderFees( OrderFeesCreateReqVO createReqVO);

    /**
     * 批量创建账单明细
     *
     * @param contractRentorder 创建信息
     * @return 编号
     */
    List<OrderFeesDO>  createBatchOrderFees( List<RentOrderDO> contractRentorder);

    /**
     * 更新账单明细 账单id
     *
     * @param updateReqVO 更新信息
     */
    void updateContractOrderfees( OrderFeesUpdateReqVO updateReqVO);

    //批量修改账单明细
    void batchUpdate(List<OrderFeesDO> updateReqVOS);

    /**
     * 删除账单明细 账单id
     *
     * @param id 编号
     */
    void deleteContractOrderfees(Long id);

    /**
     * 获取合同下的 账单明细
     * @param contractId
     * @return
     */
    List<OrderFeesDO> getOrderFeeListByContractId(Long contractId);

    /**
     *  多个账单 账单明细
     * */
    List<OrderFeesDO> getOrderFeeByorderIds(List<Long> orderIds,List<String> orderType);


    /**
     * 通过账单id 获得账单明细信息
     * @param orderId
     * @return
     */
    List<OrderFeesDetaillVo> getOrderDetail(Long orderId);
    /**
     * 通过账单id 获得账单明细信息
     * @param orderId
     * @return
     */
    OrderFeesDetailVo getOrderFeeDetail(Long orderId);
    OrderInformationVo getOrderFeesById(Long id);

    /**
     * 根据账单ID获取账单明细信息
     * @param orderId
     * @return: java.util.List<com.xiaoshuidi.cloud.module.contract.dal.dataobject.bill.OrderFeesDO>
     */
    List<OrderFeesDO> getOrderFeesByOrderId(Long orderId);

    /**
     * 修改费项支付状态
     * @param id
     * @param payStatus
     */
    void updateOrderFeePaid(Long id, String payStatus);

    PageResult<OrderDetailVo> getOrderFeesDetail(OrderFeesDetailReq req);

    List<OrderDetailExcelVo> exportContractExcel(OrderFeesDetailReq req);

    /**
     * 通过账单id 获得账单明细信息 供app
     * @return
     */
    OrderFeesDetailAppVo getOrderFeeDetailApp(Long orderId);

    void updateMemberUser(String mobile, String userName, String oldMobile, Long userId, Long oldUserId);

    OrderFeeAmountRespVO getOrderAmountByFee(OrderFeeAmountReqVO req);


    List<OrderFeesDO> getOrderFeeListByContractIds(List<Long> contractIds);

    List<OrderFeeDetailVO> getOrderDetailByOrderIds(List<Long> orderIds);


    void updateOrderFeePaidAmount(Long id, String payStatus, BigDecimal paidAmount, LocalDateTime payTime);

    List<OrderFeesDO>  getOrderFeeListByOrderId(Long id);

    void updateOrderFeeById(Long id);

    void updateOrderFeeAmountById(Long id, BigDecimal subtract);

}
